package com.sunxiansheng.user.config;

import com.sunxiansheng.threadpool.config.CustomNameThreadFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * Description: 自定义线程池
 * @Author sun
 * @Create 2024/7/24 16:57
 * @Version 1.0
 */
@Configuration
public class ThreadPoolConfig {

    /**
     * 创建并配置一个自定义的线程池
     *
     * @return 配置好的 ThreadPoolExecutor 实例
     */
    @Bean(name = "myThreadPool")
    public ThreadPoolExecutor myThreadPool() {
        // 创建一个自定义的线程工厂，指定线程池的名字
        CustomNameThreadFactory customNameThreadFactory = new CustomNameThreadFactory("myThreadPool");

        // 创建线程池，并设置其核心参数
        return new ThreadPoolExecutor(
                10, // 核心线程数
                10, // 最大线程数
                5, // 线程空闲时间
                TimeUnit.SECONDS, // 线程空闲时间的单位
                new LinkedBlockingDeque<>(), // 任务队列
                customNameThreadFactory, // 自定义线程工厂
                new ThreadPoolExecutor.CallerRunsPolicy() // 饱和策略
        );
    }
}